# 查找相关的方法
# match 和 search：
# 共同点：
# 1. 只对字符串查询一次
# 2. 返回类型都是re.Match类型的对象
# 3. match 是从头开始匹配，一旦匹配失败，就返回None；search是在整个字符串里匹配

# finditer: 查找到所有的匹配的数据放到一个可迭代对象里
# findall: 把查找到的所有字符串结果放到一个列表里
# fullmatch: 完整匹配，字符串需要完全满足正则规则才会有结果，否则是None

import re
from collections.abc import Iterable

m1 = re.match(r'hel', 'hello wrold good morining')
print(m1)   # <re.Match object; span=(0, 3), match='hel'>
m2 = re.search(r'hel', 'hello wrold good morining')
print(m2)   # <re.Match object; span=(0, 3), match='hel'>

m3 = re.match(r'good', 'hello wrold good morining')
print(m3)   # None
m4 = re.search(r'good', 'hello wrold good morining')
print(m4)   # <re.Match object; span=(12, 16), match='good'>

# finditer: 返回结果是一个可迭代对象
# 可迭代对象里的数据是匹配到的所有结果，是一个 re.Match 类型对象
m5 = re.finditer(r'x', 'skdllklkxlkldasdlkxlkxlksl')
print(isinstance(m5, Iterable))     # True

m6 = re.findall(r'x\d+', 'skdllklkx6lkldasdlkxlkxlksl')
print(m6)   # ['x6']


m7 = re.fullmatch(r'hello world', 'hello world')
print(m7)   # <re.Match object; span=(0, 11), match='hello world'>
m8 = re.fullmatch(r'hello', 'hello world')
print(m8)   # None